package com.mzy.linear_struct.面试150题;

import static com.mzy.linear_struct.subject.移动0.swap;

/**
 * @Author: mizy3
 * @Date: 2024/08/14/下午10:49
 * @Description:
 */
public class Pro189轮转数组 {

    public void rotate(int[] nums, int k) {
        // l
        // 1 2 3 4 5 6 7
        //     r

        // 5 6 7 1 2 3 4

        // 思路：先反转数组，再划分子数组，最后分别反转回来

        // 7 6 5 4 3 2 1

        // 7 6 5    4 3 2 1

        if (nums.length <= 1) return;
        reverse(nums, 0, nums.length - 1);
        reverse(nums, 0, k - 1);
        reverse(nums, k, nums.length - 1);
    }

    private void reverse(int[] nums, int i, int j) {
        while (i < j) {
            swap(nums, i, j);
            i++;
            j--;
        }
    }

    public static void main(String[] args) {
        new Pro189轮转数组().rotate(new int[]{1, 2, 3, 4, 5, 6, 7}, 3);
    }
}
